package com.project.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.project.bean.GradeBean;
import com.project.bean.RoleBean;
import com.project.mapper.IGradeMapper;
import com.project.mapper.IRoleMapper;
import com.project.service.IRoleService;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.lang.reflect.Array;
import java.util.List;
@Service
@Transactional
public class RoleServiceImpl implements IRoleService {
    @Autowired
    private IRoleMapper roleMapper;
    @Autowired
    private IGradeMapper gradeMapper;
    @Override
    public List<RoleBean> findAll() {//查询所有角色
        QueryWrapper<RoleBean> qw=new QueryWrapper<>();
        return roleMapper.selectList(qw);
    }

    @Override
    public List<GradeBean> findByIdArray(int [] gradeArray) {//通过角色id数组查询角色的权限集合，去除重复权限。
//        System.out.println("得到"+gradeArray[0]);
        return roleMapper.findByIdArray(gradeArray);
    }

    @Override
    public IPage<RoleBean> findAllByPage(Integer pageNO) {
        QueryWrapper<RoleBean> qw=new QueryWrapper<>();
        return roleMapper.selectPage(new Page<>(pageNO,3),qw);
    }
    @Override
    public void del(Integer id) {
        roleMapper.delUser_Role(id);//通过角色id删除用户角色中间表
        roleMapper.delGrade_Role(id);//通过角色id删除权限角色中间表
        roleMapper.deleteById(id);//通过角色id删除角色
    }
    @Override
    public RoleBean findById(Integer id) {////按角色id 查询角色信息，同时查询角色拥有的权限集合
        RoleBean role= roleMapper.selectById(id);
        role.setGradeBeanList(roleMapper.findByRoleId(id));
        return role;
    }

    @Override
    public List<GradeBean> findAllGrade() {//查询所有的权限信息
        QueryWrapper<GradeBean> qw=new QueryWrapper<>();
        return gradeMapper.selectList(qw);
    }
    /**
     * 通过角色id修改用户的权限
     * 先通过角色id删除中间表相关信息，再添加新的权限信息
     * @param id    角色id
     * @param newArray  用户新权限id数组
     */
    @Override
    public void updateGrade(Integer id, int[] newArray) {
        roleMapper.delGrade_Role(id);//通过角色id删除中间表相关信息
        roleMapper.addGradeRole(id,newArray);//添加新的权限数组
    }

    @Override
    public void add(RoleBean roleBean, int[] gradeArray) {
        roleMapper.insert(roleBean);//添加角色
        roleMapper.addGradeRole(roleBean.getRoleId(),gradeArray);//添加角色的权限数组

    }
}
